onnx 檔案來源:onnx-yolov3
參考資料:
在 Windows 10 上,將 yolov3-tiny.onnx 轉換為 Kneron AI dongle (耐能AI加速棒)可用的格式。
使用的耐能 AI 加速棒版本為 KL520。
使用的 Kneron Toolchain Docker Image 版本為 v0.14.1,如下圖:

可參考:Kneron Linux Toolchain Manual
已備份到:archive.today
可參考:Install Docker Desktop on Windows
執行指令:
docker pull kneron/toolchain:latest
取得最新的 toolchain 映像檔。
參考指令:
docker run --rm -it -v /mnt/docker:/docker_mount kneron/toolchain:latest
記得把 /mnt/docker 換成 yolov3-tiny.onnx 模型檔案所在的資料夾,以方便轉檔時直接取用,建議額外創建一個資料夾,放置 yolov3-tiny.onnx 模型檔案。
在 win 10 ,掛載資料夾時,路徑要做一些修改。
例如:yolov3-tiny.onnx 模型檔案所在的資料夾為C:\Users\p2330\Desktop\yolov3_onnx 要改成 /c/Users/p2330/Desktop/yolov3_onnx。C: 改成 /c , \ 改成 / 。
修改指令如下:
docker run --rm -it -v /c/Users/p2330/Desktop/yolov3_onnx:/docker_mount kneron/toolchain:latest
執行結果如下:
如下圖,切換到 /docker_mount 目錄,可以看到掛載的資料夾內有 yolov3-tiny.onnx 模型檔案:
可參考:6 ONNX to ONNX (ONNX optimization)
複製 yolov3-tiny.onnx 到 data1 資料夾。
執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx2onnx.py yolov3-tiny.onnx -o yolov3-tiny_opt.onnx --add-bn -t
會報錯:RuntimeError: Only support opset 11, but got 9
解決方式:因為目前支援的 onnx Opset version 為 11,但 yolov3-tiny.onnx 的 Opset version 為 9,所以需要更新 ONNX version。
可參考:8 ONNX Updater

執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx1_4to1_6.py yolov3-tiny.onnx yolov3-tiny_up.onnx
得到 yolov3-tiny_up.onnx 更新過的 onnx 檔案。
執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx2onnx.py yolov3-tiny_up.onnx -o yolov3-tiny_opt.onnx --add-bn -t
可以得到 yolov3-tiny_opt.onnx 優化過的 onnx 檔案。
可參考:3. Toolchain Scripts Usage 的 3.2 跟 3.6 小節
input_params.json 檔案input_params.json 設定如下:
{
    "model_info": {
        "input_onnx_file": "/data1/yolov3-tiny_opt.onnx",
        "model_inputs": [
            {
                "model_input_name": "input",
                "input_image_folder": "/data1/imgs"
            }
        ]
    },
    "preprocess": {
        "img_preprocess_method": "yolo",
        "img_channel": "RGB",
        "radix": 7,
        "keep_aspect_ratio": true,
        "pad_mode": 1,
        "p_crop": {
            "crop_x": 0,
            "crop_y": 0,
            "crop_w": 0,
            "crop_h": 0
        }
    }
}
imgs 的圖片可以到 darknet/data/ 下載 .jpg 圖檔,作為轉檔時的圖片輸入。
記得把 imgs 放在 /data1 底下。
batch_input_params.json 檔案batch_input_params.json 設定如下:
{
    "encryption": {
        "whether_encryption": false,
        "encryption mode": 1,
        "encryption_key": "0x12345678",
        "key_file": "",
        "encryption_efuse_key": "0x12345678"
    },
    "models": [
        {
            "id": 123,
            "version": "1",
            "path": "/data1/yolov3-tiny_opt.onnx",
            "input_params": "/data1/input_params.json"
        }
    ]
}
models 裡面的 id 跟 version 可以依照使用情況自由調整。
做完以上操作後,目錄結構如下圖:
在 /data1 執行指令:
python /workspace/scripts/fpAnalyserBatchCompile_520.py -t 8

會產生 batch_compile 跟 fpAnalyser 資料夾。

轉換後的模型檔案為 batch_compile 資料夾內的 models_520.nef 。
可以將 models_520.nef 複製出來在 Kneron Host Lib 官方範例上使用。
